home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 6 / QRZ Ham Radio Callsign Database - Volume 6.iso / mac / files / amiga / csrc720j.lzh / mblog.c < prev    next >
C/C++ Source or Header  |  1993-08-15  |  8KB  |  388 lines

  1. /*
  2.  *  MBLOG.C - 10/15/90 - Logging and Monitoring.
  3.  */
  4.  
  5. #include "mb.h"
  6.  
  7. #ifndef MCH_AMIGA
  8. #define ln_jstr (ln_callp + ln_time + (ln_date-2))
  9. #else
  10. int ln_jstr = (ln_callp + ln_time + (ln_date-2));
  11. #endif
  12.  
  13. #ifdef MCH_AMIGA
  14. /* Add a log_yr variable so that the year can be used as part of the
  15.    date when a log file is renamed. e.g. to log9011.mb instead of log11.mb
  16. */
  17. int log_yr;
  18. #endif
  19.  
  20. char *lgfile;
  21. FILE *lfl;
  22.  
  23. char *monfile;
  24.  
  25. char *hrdfile, *hrd;
  26. int  hrdmax, hrdn;
  27.  
  28. /*
  29.  *  Clean the log file.
  30.  *  Force drain of buffers, update of directory item.
  31.  */
  32.  
  33. clnlog()
  34. {
  35.   if (s_param & s_log_on)
  36.   {
  37.     fclose(lfl);
  38.     lfl = fopen(lgfile, "a+");
  39.   }
  40. }
  41.  
  42. clslog()
  43. {
  44. #ifndef MCH_AMIGA
  45.   if (s_param & s_log_on) fclose (lfl);
  46. #else
  47.    if(s_param & s_log_on) {
  48.       if(lfl) {
  49.          fclose (lfl);
  50.          lfl = 0;
  51.       }
  52.    }
  53. #endif
  54. }
  55.  
  56. /*
  57.  *  Open the log file.
  58.  */
  59.  
  60. opnlog()
  61. {
  62.   if (s_param & s_log_on)
  63. #ifndef MCH_AMIGA
  64.     if ((lfl = fopen(lgfile, "a+")) is NULL) { nofile(lgfile); exit(1); }
  65. #else
  66.     if ((lfl = fopen(lgfile, "a+")) is NULL) { nofile(lgfile); done(1); }
  67. #endif
  68. }
  69.  
  70. /*
  71.  * Get the log date.
  72.  */
  73.  
  74. logdat()
  75. {
  76.   if (s_param & s_log_on)
  77.   {
  78.     fseek(lfl, 0L, 0);
  79.     fgets(port->line, linelen, lfl);
  80.     log_mon = 10 * (port->line[3] - '0') + (port->line[4] - '0');
  81. #ifdef MCH_AMIGA
  82. /* Only to allow rename of log file to contain year as well */
  83.     log_yr = 10 * (port->line[1] - '0') + (port->line[2] - '0');
  84. #endif
  85.     fseek (lfl, 0L, 2);
  86.   }
  87. }
  88.  
  89. /*
  90.  * Change the log file at end of month.
  91.  */
  92.  
  93. chglog()
  94. {
  95.   register char *logp;
  96.   char logs[80], nlgfile[80];
  97.  
  98.   log ('X', 'Q', ' ', nullstr);
  99.   clslog();
  100.   logp = strchr(lgfile, '.');
  101.   strncpy( logs, lgfile, (int)(logp-lgfile));
  102.   logs[(int)(logp-lgfile)] = '\0';
  103. #ifndef MCH_AMIGA
  104.   sprintf( nlgfile, "%s%02u%s", logs, log_mon, logp);
  105. #else
  106. /* Put the last two digits of the year in the filename too */
  107.   sprintf( nlgfile, "%s%02u%02u%s", logs, log_yr, log_mon, logp);
  108. #endif
  109.   printf( "%s renamed to %s\n", lgfile, nlgfile);
  110.   rename(lgfile, nlgfile);
  111.   opnlog();
  112.   log ('C', 'I', ' ', nullstr);
  113.   logdat();
  114. }
  115.  
  116. /*
  117.  *  Log an event.
  118.  */
  119.  
  120. log(event, fn, sfn, text)
  121. char event, fn, sfn, *text;
  122. {
  123.  
  124. /*
  125.  *  Do we log this type of event?
  126.  */
  127.  
  128.   if (!(s_param & s_log_on)) return;
  129.  
  130.   if (port->dev is p_console) if (!(s_param & s_log_loc))
  131.   switch(event)
  132.   {
  133.     case 'M' : if(!((fn is 'M') or (fn is 'S'))) return; break;
  134.     case 'X' : if(fn isnt 'Q') return; break;
  135.     case 'C' : if(fn isnt 'I') return; break;
  136.     default  : return;
  137.   }
  138.  
  139.   switch(event)
  140.   {
  141.     case 'U' : if (!(s_param & s_log_gate)) return; break;
  142.     case 'M' : if (!(s_param & s_log_msg))  return; break;
  143.     case 'F' : if (!(s_param & s_log_file)) return; break;
  144.   }
  145.  
  146. /*
  147.  *  Yes, so log it.
  148.  */
  149.  
  150.   curtim();
  151.   fprintf(lfl, "%c%s%s%c%c %s\n", event, l_date, l_time, fn, sfn, text);
  152. }
  153.  
  154. /*
  155.  *  Monitoring ...
  156.  */
  157. #ifdef MCH_SYSOP
  158. opnmon()
  159. {
  160. }
  161. clsmon()
  162. {
  163. }
  164. #else
  165. /* SYSOP doesn't do monitoring at all */
  166. clsmon()
  167. {
  168.   register short  i;
  169.   register char  *c;
  170.   register PORTS *p;
  171.  
  172. /*
  173.  *  Write out the heard log.
  174.  */
  175.  
  176.   if ((port->fl = fopen(hrdfile, "w")) isnt NULL)
  177.   {
  178.     sort(hrd, hrdn, ln_call, tmp->scr);
  179.     for (i = 0, c = hrd; i < hrdn; i++, c += ln_call)
  180.       fprintf(port->fl, "%6.6s\n", c);
  181.     fclose(port->fl);
  182.   }
  183.  
  184. /*
  185.  *  Write out the J list for each port.
  186.  */
  187.  
  188.   if ((port->fl = fopen(monfile, "w")) isnt NULL)
  189.   {
  190.     for (p = porthd; p isnt NULL; p = p->next)
  191.     {
  192.       for (i = 0, c = p->heard; i < p->nhrd; i++, c += ln_jstr)
  193.       fprintf (port->fl, "%17.17s\n", c);
  194.       fprintf (port->fl, "*** EOF\n");
  195.     }
  196.     fprintf (port->fl, "%s%s\n", l_date, l_time);
  197.     fclose (port->fl);
  198.   }
  199. }
  200.  
  201. /*
  202.  *  Open "heard log" and "monitor log".
  203.  */
  204.  
  205. opnmon()
  206. {
  207.   register char *i, *j, *st;
  208.   register PORTS *p;
  209.  
  210. /*
  211.  *  Open the "heard list" file.
  212.  */
  213. #ifndef MCH_AMIGA
  214.   if ((hrd = (char *)malloc(ln_call * hrdmax)) is NULL) errall();
  215. #else
  216.   if ((hrd = (char *)malloc(ln_call * hrdmax)) is NULL) errall(3);
  217. #endif
  218.  
  219.   hrdn = 0;
  220.  
  221.   if ((port->fl = fopen(hrdfile, "r")) isnt NULL)
  222.   {
  223.     i = hrd;
  224.     while((hrdn < hrdmax) and (fgets (port->line, linelen, port->fl) isnt NULL))
  225.     {
  226.       pcall(i, port->line);
  227.       hrdn++; i += ln_call;
  228.     }
  229.     fclose(port->fl);
  230.     sprintf(port->line, "%d calls in %s", hrdn, hrdfile); outstr(port->line);
  231. #ifdef MCH_AMIGA
  232.       sprintf(port->line," hrdmax = %d",hrdmax);
  233.       outstr(port->line);
  234.     if (hrdn is hrdmax) outstr(" (File is full.)");
  235.     outchar('\n');
  236. #endif
  237.   }
  238.  
  239. /*
  240.  *  Open the monitor file and read the J list for each port.
  241.  */
  242.  
  243.   if ((port->fl = fopen(monfile, "r")) isnt NULL)
  244.   {
  245.     for (p = porthd; p isnt NULL; p = p->next)
  246.     {
  247.       st = fgets (port->line, linelen, port->fl);
  248.       j = p->heard;
  249.       while (!iseof(port->line) and (st isnt NULL))
  250.       {
  251.    if (p->nhrd < p->maxhrd)
  252.    {
  253.      for (i = port->line; i < port->line + ln_jstr;) *j++ = *i++;
  254.      p->nhrd++;
  255.    }
  256.    st = fgets (port->line, linelen, port->fl);
  257.       }
  258.     }
  259.     fclose(port->fl);
  260.   }
  261. }
  262.  
  263. /*
  264.  *  Add call in monitored packet to J list of current port.
  265.  */
  266.  
  267. monitor()
  268. {
  269.   register short l1, l2;
  270. #ifdef MCH_AMIGA
  271.    extern PORTS *devtnc;
  272.  
  273.    if(devtnc->dev == p_serial)return;
  274.    if(devtnc->dev == p_nulmdm)return;
  275. #endif
  276.   if (port->heard is NULL) return;
  277.   for (l1 = 0; l1 < ln_callp; l1++) if (port->line[l1] is '>')
  278.   {
  279.     if (l1 < 4) return;
  280.  
  281.     port->line[l1] = '\0';
  282.     for (l2 = 1; l2 < 10; l2++)
  283.     if ((port->line[l1 + l2] is ':') or
  284. #ifdef MCH_AMIGA
  285. /* For KAM */
  286.    (port->line[l1 + l2] is '/') or
  287. #endif
  288.    (port->line[l1 + l2] is ',') or
  289.    (port->line[l1 + l2] is ' ') or
  290.    (port->line[l1 + l2] is '\0'))
  291.     {
  292.       if (l2 > 4) { addcall(port->line, port); addhrd(); }
  293.       return;
  294.     }
  295.     return;
  296.   }
  297. }
  298.  
  299. /*
  300.  *  Add call to heard list.
  301.  */
  302.  
  303. addhrd()
  304. {
  305.   register int i;
  306.   register char *p;
  307.   if (hrdn >= hrdmax) return;
  308.   pcall(tmp->scr, port->line);
  309.  
  310.   for (i = 0, p = hrd; i < hrdn; i++, p += ln_call)
  311.   if (matchn(tmp->scr, p, ln_call)) return;
  312.   strncpy(hrd + (ln_call * hrdn++), tmp->scr, ln_call);
  313. }
  314.  
  315. /*
  316.  *  Add call to J list.
  317.  */
  318.  
  319. addcall(cp, p)
  320. char *cp;
  321. PORTS *p;
  322. {
  323.   register char  *k;
  324.   register short i;
  325.   register char  *sk;
  326.   register short si;
  327.   ljsf(tmp->scr, cp, ln_callp);
  328.  
  329. /*
  330.  *  Check if this call already in list for this port.
  331.  */
  332.  
  333.   si = -1;
  334.   for (i = 0, k = p->heard; i < p->nhrd; i++, k += ln_jstr)
  335.   if (matchn(tmp->scr, k, ln_callp)) { si = i; sk = k; }
  336.  
  337. /*
  338.  *  If not already in the list ...
  339.  */
  340.  
  341.   if (si is -1)
  342.   {
  343.     si = p->nhrd; sk = p->heard + ln_jstr * p->nhrd;
  344.     if (p->nhrd < p->maxhrd) p->nhrd++; else { si--; sk -= ln_jstr; }
  345.   }
  346.  
  347. /*
  348.  *  Put call at top of list for this port.
  349.  */
  350.  
  351.   for (; si; si--, sk -= ln_jstr) strncpy (sk, sk - ln_jstr, ln_jstr);
  352.   curtim();
  353.   strncpy(p->heard + ln_callp, l_time, ln_time);
  354.   strncpy(p->heard + ln_callp+ln_time, l_date+2, ln_date-2);
  355.   strncpy(p->heard, tmp->scr, ln_callp);
  356. }
  357. #endif
  358. /*
  359.  *  J command, print list of calls heard.
  360.  */
  361.  
  362. prthrd()
  363. {
  364.   register short i;
  365.   register char *j;
  366.   register PORTS *p;
  367. #ifdef MCH_SYSOP
  368.    prtx(mcant);
  369.    return;
  370. #endif
  371.   if (port->opt2 is ' ') { shports(); return; }
  372.  
  373.   if ((p = findport(port->opt2)) is NULL) { prtx(mnport); return; }
  374.  
  375.   sprintf(tmp->scr, "Port %c, %s\n", p->id, p->name);
  376.   outstr(tmp->scr);
  377.  
  378.   if (!(p->nhrd)) { prtx(mfind); return; }
  379.  
  380.   for (i = 0, j = p->heard; i < p->nhrd; i++, j += ln_jstr)
  381.   {
  382.     sprintf(tmp->scr, "%9.9s %4.4s %2.2s/%2.2s\n", j, j + ln_callp,
  383.             j+(ln_callp+ln_time), j+(ln_callp+ln_time+2));
  384.     outstr(tmp->scr);
  385.   }
  386. }
  387.  
  388.